package com.qyer.lxp.lxdao.price.impl;

import com.qyer.lxp.common.framework.contants.QyerMethodNameContants;
import com.qyer.lxp.common.framework.convert.TransformSession;
import com.qyer.lxp.common.framework.exception.QyerException;
import com.qyer.lxp.lxdao.price.IPriceDao;
import com.qyer.lxp.model.price.normal.*;
import com.qyer.lxp.model.price.parameter.AvailableDatesRequest;
import com.qyer.lxp.model.price.parameter.PeriodPriceQueryRequest;
import com.qyer.lxp.model.price.parameter.PriceQueryRequest;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * 力行获取价格实现类
 * Created by jiangping on 16/5/18.
 */
@Component
public class PriceDaoImpl implements IPriceDao {

    /**
     * 获取销售项目某一天的价格信息接口
     *
     * 据销售项目 code 和日期查询价格信息。如果是产品更新,
     * 建议使用下 面的 getPriceByPeriod 批量获取价格。
     *
     * @param priceQueryRequest 调取力行接口需要的参数
     * @return 返回查询条件内的价钱
     * @throws Exception
     */
    @Override
    public List<Price> getPriceByDay(PriceQueryRequest priceQueryRequest) throws Exception {
        List<Price> priceList = null;
        Prices prices = (Prices)TransformSession.selectOne(QyerMethodNameContants.LX_METHOD_NAME_GETPRICEBYDAY,priceQueryRequest,QyerMethodNameContants.LX_CLASS_NAME_PRICES);
        if(null != prices){
            priceList = prices.getPriceList();
        }
        return priceList;
    }

    /**
     * 获取销售项目或者产品某一段时间的价格信息接口
     * <p>
     * 根据销售项目 code 或者产品 code 和日期查询价格信息。
     * 每次最多只返回 31 天的价格数据。
     *
     * @param periodPriceQueryRequest 调取力行接口需要的参数
     * @return 返回查询条件内的价钱
     * @throws Exception
     */
    @Override
    public List<DailyPrice> getPriceByPeriod(PeriodPriceQueryRequest periodPriceQueryRequest) throws Exception {
        List<DailyPrice> dailyPriceList = null;
        PricesCollection pricesCollection = (PricesCollection)TransformSession.selectOne(QyerMethodNameContants.LX_METHOD_NAME_GETPRICEBYPERIOD,periodPriceQueryRequest,QyerMethodNameContants.LX_CLASS_NAME_PRICESCOLLECTION);
        if(null != pricesCollection){
            dailyPriceList = pricesCollection.getDailyPriceList();
        }
        return dailyPriceList;
    }

    /**
     * 获取销售项目的可售日期数据接口
     *
     * @param availableDatesRequest 销售code
     * @return 返回可售日期
     * @throws Exception
     */
    @Override
    public List<Date> getAvailableDates(AvailableDatesRequest availableDatesRequest) throws Exception {
        List<Date> dateList = null;
        AvailableDate availableDate = (AvailableDate)TransformSession.selectOne(QyerMethodNameContants.LX_METHOD_NAME_GETAVAILABLEDATES,availableDatesRequest,QyerMethodNameContants.LX_CLASS_NAME_AVAILABLEDATE);
        if(null != availableDate){
            dateList = availableDate.getDateList();
        }
        return dateList;
    }

}
